#!/bin/bash

# Weubi Crawler 项目初始化脚本
# 基于奥卡姆剃刀原则：一键完成所有初始化工作

set -e

echo "🚀 开始初始化 Weubi Crawler 项目..."

# 检查必要工具
check_requirements() {
    echo "📋 检查系统要求..."
    
    # 检查 Node.js
    if ! command -v node &> /dev/null; then
        echo "❌ Node.js 未安装，请先安装 Node.js 18+"
        exit 1
    fi
    
    # 检查 pnpm
    if ! command -v pnpm &> /dev/null; then
        echo "📦 安装 pnpm..."
        npm install -g pnpm
    fi
    
    # 检查 Docker
    if ! command -v docker &> /dev/null; then
        echo "❌ Docker 未安装，请先安装 Docker"
        exit 1
    fi
    
    # 检查 Docker Compose
    if ! command -v docker-compose &> /dev/null; then
        echo "❌ Docker Compose 未安装，请先安装 Docker Compose"
        exit 1
    fi
    
    echo "✅ 系统要求检查完成"
}

# 安装依赖
install_dependencies() {
    echo "📦 安装项目依赖..."
    pnpm install
    echo "✅ 依赖安装完成"
}

# 构建项目
build_project() {
    echo "🔨 构建项目..."
    pnpm build
    echo "✅ 项目构建完成"
}

# 设置环境变量
setup_env() {
    echo "⚙️ 设置环境变量..."
    
    if [ ! -f .env ]; then
        cp .env.example .env
        echo "📝 已创建 .env 文件，请根据需要修改配置"
    else
        echo "📝 .env 文件已存在"
    fi
    
    echo "✅ 环境变量设置完成"
}

# 启动基础设施
start_infrastructure() {
    echo "🐳 启动基础设施服务..."
    
    # 停止可能存在的容器
    docker-compose down 2>/dev/null || true
    
    # 启动基础设施
    docker-compose up -d postgres redis rabbitmq
    
    # 等待服务启动
    echo "⏳ 等待服务启动..."
    sleep 10
    
    # 检查服务状态
    if docker-compose ps | grep -q "Up"; then
        echo "✅ 基础设施服务启动成功"
    else
        echo "❌ 基础设施服务启动失败"
        docker-compose logs
        exit 1
    fi
}

# 初始化数据库
init_database() {
    echo "🗄️ 初始化数据库..."
    
    # 等待数据库完全启动
    echo "⏳ 等待数据库启动..."
    sleep 5
    
    # 运行数据库迁移
    pnpm db:migrate || echo "⚠️ 数据库迁移失败，可能是首次运行"
    
    # 运行数据库种子
    pnpm db:seed || echo "⚠️ 数据库种子失败，可能是首次运行"
    
    echo "✅ 数据库初始化完成"
}

# 验证安装
verify_installation() {
    echo "🔍 验证安装..."
    
    # 检查数据库连接
    if docker-compose exec -T postgres pg_isready -U crawler -d weubi_crawler; then
        echo "✅ PostgreSQL 连接正常"
    else
        echo "❌ PostgreSQL 连接失败"
    fi
    
    # 检查 Redis 连接
    if docker-compose exec -T redis redis-cli ping | grep -q "PONG"; then
        echo "✅ Redis 连接正常"
    else
        echo "❌ Redis 连接失败"
    fi
    
    # 检查 RabbitMQ 连接
    if docker-compose exec -T rabbitmq rabbitmq-diagnostics ping | grep -q "Ping succeeded"; then
        echo "✅ RabbitMQ 连接正常"
    else
        echo "❌ RabbitMQ 连接失败"
    fi
    
    echo "✅ 安装验证完成"
}

# 显示后续步骤
show_next_steps() {
    echo ""
    echo "🎉 Weubi Crawler 初始化完成！"
    echo ""
    echo "📋 后续步骤："
    echo "1. 启动开发服务器："
    echo "   pnpm dev"
    echo ""
    echo "2. 访问应用："
    echo "   - Web界面: http://localhost:3000"
    echo "   - API文档: http://localhost:3001/docs"
    echo "   - RabbitMQ管理: http://localhost:15672 (crawler/password)"
    echo ""
    echo "3. 查看日志："
    echo "   docker-compose logs -f"
    echo ""
    echo "4. 停止服务："
    echo "   docker-compose down"
    echo ""
    echo "📚 更多信息请查看 README.md"
}

# 主函数
main() {
    check_requirements
    install_dependencies
    build_project
    setup_env
    start_infrastructure
    init_database
    verify_installation
    show_next_steps
}

# 错误处理
trap 'echo "❌ 安装过程中出现错误，请检查日志"; exit 1' ERR

# 执行主函数
main
